package com.cdel.akka.chapter1.actor;

import akka.actor.AbstractActor;
import akka.event.Logging;
import akka.event.LoggingAdapter;
import akka.japi.pf.ReceiveBuilder;
import java.util.HashMap;
import java.util.Map;
import com.cdel.akka.chapter1.domain.SetRequest;

public class AkkademyDb extends AbstractActor {

	protected final LoggingAdapter log = Logging.getLogger(context().system(), this);
	public final Map<String, Object> map = new HashMap<String, Object>();

	//做了两件事：1、把消息输出到日志；2、将任何set消息中的内容保存起来，以供之后使用
    private AkkademyDb(){
        receive(ReceiveBuilder.
        				//定义actor接收到任何SetRequest消息时做出的响应。
        				//这个match方法有点像case语句，只不过可以匹配类的类型，就是模式匹配。
                        match(SetRequest.class, message -> {
                            log.info("Received Set request: {}", message);
                            map.put(message.getKey(), message.getValue());
                        }).
                        //其次，我们捕获其他所有位置类型的消息，直接输出日志
                        matchAny(o -> log.info("received unknown message: {}", o)).build()
        );
    }

}
